// console.log('process.env.NODE_ENV', process.env.NODE_ENV) // 默认development（在终端输出）
const configs = require('./config/elliotConfig');

// 用于做相应的 merge 处理
const merge = require('webpack-merge');

function config(){
    const NODE_ENV = process.env.NODE_ENV
    console.log('NODE_ENV', NODE_ENV)
    switch (NODE_ENV) {
        case 'testDev':
            return configs.testDev.env
            break
        case 'testDevCdn':
            return configs.testDevCdn.env
            break
        case 'testBuild':
            return configs.testBuild.env
            break
        case 'productDev':
            return configs.productDev.env
            break
        case 'productDevCdn':
            return configs.productDevCdn.env
            break
        case 'productBuild':
            return configs.productBuild.env
        default: 
            return configs.productBuild.env
    }
}

// 根据环境判断使用哪份配置
const cfg = config()

console.log('cfg', cfg)

module.exports = {
    configureWebpack: {
        performance: {
            maxEntrypointSize: 500000000,
        },
        resolve: {
            alias: {
                _assets: '@/assets', // 静态资源
                _cache: '@/cache', // 缓存
                _utils: '@/utils', // 函数库
                _commonFn: '_utils/common', // 公共函数库
                _projectFn: '_utils/project', // 项目专用函数库
                _components: '@/components', // 组件库
                _network: '@/network', // 网络请求
                _router: '@/router', // 路由配置
                _store: '@/store', // VUEX
                _views: '@/views', // 页面
            }
        }
    },
    // 该配置会修改 webpack 中 devtool 项的值为 source-map
    // 该配置项用于设置是否为生产环境构建生成 source map，一般在生产环境下为了快速定位错误信息，我们都会开启 source map
    productionSourceMap: true,
    devServer: {
        // open: true, // 是否自动打开浏览器页面
        // host: '0.0.0.0', // 指定使用一个 host。默认是 localhost
        // port: 8080, // 端口地址
        // https: false, // 使用https提供服务
        // proxy: null, // string | Object 代理设置
        
        // 提供在服务器内部的其他中间件之前执行自定义中间件的能力
        // before: app => {
          // `app` 是一个 express 实例
        // }
    },
    chainWebpack: config => {
        config.plugin('define')
        .tap(args => {
            let name = 'process.env';
            
            // 使用 merge 保证原始值不变
            args[0][name] = merge(args[0][name], cfg);

            return args
        })
        config.output.filename('[name].[hash].js').end()
    },
    // outputDir: 'hello' // 打包生成的文件夹名称
    publicPath: './',
    assetsDir: './'
}